home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
fb386smp
/
fs
/
dos.asm
next >
Wrap
Assembly Source File
|
1994-09-20
|
7KB
|
301 lines
;=========================================================================
; âtâ@âCâïâtâ@âôâNâVâçâô
;=========================================================================
;386|ASMé┼é═ë║é╠éRìsé≡ùLî°é╔é╖éΘ
; .386p
;cseg segment dword public ER use32 'CODE'
;assume cs:cseg,ds:cseg
;----------------------------------------------------------------------
; ï@ö\î─é╤Åoé╡
;----------------------------------------------------------------------
jmp seachIcnSel
jmp memCpy
jmp getFreeSpace
jmp isFixed
jmp isExist
jmp findFirst
jmp findNext
jmp getCurrentDrv
jmp getCurrentDir
;----------------------------------------------------------------------
; âJâîâôâgâfâBâXâNé╠ĵô╛
; callm(ENTRY,varptr(drv$))
;----------------------------------------------------------------------
getCurrentDrv:
mov ah,19h
int 21h
mov edi,dword ptr [esp+4]
mov edi,dword ptr [edi]
movzx eax,al
push eax
add al,'A'
mov [edi],al
pop eax
inc eax
ret
;----------------------------------------------------------------------
; âJâîâôâgâfâBâîâNâgâèé╠ĵô╛
; callm(ENTRY,DriveNo,varptr(dir$)) DriveNo=1ü`26
;----------------------------------------------------------------------
getCurrentDir:
mov dl,[esp+4]
mov esi,dword ptr [esp+8]
mov esi,dword ptr [esi]
mov ah,47h
int 21h
jc DrError
xor eax,eax
ret
;----------------------------------------------------------------------
; âtâ@âCâïé╠îƒì⌡(éPôxû┌)
; callm(ENTRY,varptr(wild$),attr,varptr(fileName$),varptr(attr),varptr(size))
;----------------------------------------------------------------------
findFirst:
push ebp
mov ebp,esp
add ebp,8
push es
push ds
pop es
mov edx,offset DTA ;DTAé╠É▌ÆΦ
mov ah,1ah
int 21h
mov edx,[ebp] ;Æ▓é╫éΘâtâ@âCâïû╝é╠âAâhâîâXé≡É▌ÆΦ
mov edx,[edx]
mov ecx,[ebp+4] ;Æ▓é╫éΘâtâ@âCâïé╠âAâgâèârâàü[âgé≡É▌ÆΦ
mov ah,4eh
int 21h
jc FindError
mov esi,offset DTA
movzx eax,byte ptr [esi+15h]
mov edi,[ebp+12] ;î⌐é┬é»é╜âtâ@âCâïé╠âAâgâèârâàü[âgé≡ò╘é╖
mov dword ptr [edi],eax
mov eax,dword ptr [esi+1ah]
mov edi,[ebp+16] ;î⌐é┬é»é╜âtâ@âCâïé╠æσé½é│é≡ò╘é╖
mov dword ptr [edi],eax
mov eax,dword ptr [esi+16h]
mov edi,[ebp+20] ;î⌐é┬é»é╜âtâ@âCâïé╠ì∞ɼöNîÄé≡ò╘é╖
mov dword ptr [edi],eax
mov esi,offset DTA+1eh
mov edi,[ebp+8] ;î⌐é┬é»é╜âtâ@âCâïû╝é≡ò╘é╖
mov edi,[edi]
mov ecx,13
rep movsb
xor eax,eax
pop es
pop ebp
ret
FindError:
xor eax,eax
dec eax
pop es
pop ebp
ret
;----------------------------------------------------------------------
; âtâ@âCâïé╠îƒì⌡(éQôxû┌ê╚ì~)
; callm(ENTRY,varptr(fileName$),varptr(attr),varptr(size))
;----------------------------------------------------------------------
findNext:
push ebp
mov ebp,esp
add ebp,8
push es
push ds
pop es
mov ah,4fh
int 21h
jc FindError
mov esi,offset DTA
movzx eax,byte ptr [esi+15h]
mov edi,[ebp+4] ;î⌐é┬é»é╜âtâ@âCâïé╠âAâgâèârâàü[âgé≡ò╘é╖
mov dword ptr [edi],eax
mov eax,dword ptr [esi+1ah]
mov edi,[ebp+8] ;î⌐é┬é»é╜âtâ@âCâïé╠æσé½é│é≡ò╘é╖
mov dword ptr [edi],eax
mov eax,dword ptr [esi+16h]
mov edi,[ebp+12] ;î⌐é┬é»é╜âtâ@âCâïé╠ì∞ɼöNîÄé≡ò╘é╖
mov dword ptr [edi],eax
mov esi,offset DTA+1eh
mov edi,[ebp] ;î⌐é┬é»é╜âtâ@âCâïû╝é≡ò╘é╖
mov edi,[edi]
mov ecx,13
rep movsb
xor eax,eax
pop es
pop ebp
ret
;----------------------------------------------------------------------
; FreeSpaceé≡ô╛éΘ
; callm(ENTRY,DriveNo) DriveNo=1ü`26
;----------------------------------------------------------------------
getFreeSpace:
mov dl,[esp+4]
mov ah,36h
int 21h
cmp ax,0ffffh
je DrError
xor edx,edx
and eax,0ffffh
and ebx,0ffffh
and ecx,0ffffh
mul ebx
mul ecx
ret
;----------------------------------------------------------------------
; î≡è╖ë┬ö\âfâBâXâNé⌐
; callm(ENTRY,DriveNo) DriveNo=1ü`26
; ret=0 removal ret=1 Fixed
;----------------------------------------------------------------------
isFixed:
mov bl,[esp+4]
mov ax,4408h
int 21h
jc DrError
movzx eax,ax
ret
;----------------------------------------------------------------------
; âhâëâCâuæ╢ì▌â`âFâbâN
; callm(ENTRY,DriveNo) DriveNo=1ü`26
;----------------------------------------------------------------------
isExist:
mov bl,[esp+4]
mov ax,4409h
int 21h
jc DrError
movzx eax,ax
ret
DrError:
xor eax,eax
dec eax
ret
;----------------------------------------------------------------------
; 24ü~24dotâAâCâRâôé╠âZâîâNâ^îƒì⌡
; callm seachIcnSel
;----------------------------------------------------------------------
; 24ü~24dotâAâCâRâô
; âIâtâZâbâg 0x16 î┬Éö80î┬(ü~2)
; 32ü~32dotâAâCâRâô
; âZâOâüâôâgâZâîâNâ^ 108h âIâtâZâbâg 0x28000 î┬Éö128î┬(ü~2)
;
seachIcnSel:
push fs
push es
push ebx
push esi
mov eax,30h ;LDTé╠éáéΘâZâOâüâôâgé╠alias
mov es,ax
xor esi,esi
mov ebx,4
sel_loop:
mov al,es:[esi+5] ;âfâXâNâèâvâ^æ«É½é╠P=0é╚éτâZâOâüâôâgé¬é╚éó
test al,80h ;é╠é┼âGâëü[
je short seach_error
mov al,es:[esi+6] ;âfâXâNâèâvâ^æ«É½é╠G=1é╚éτâyü[âWÆPê╩
test al,80h
jne short skip_01
mov ax,es:[esi] ;âZâOâüâôâgâèâ~âbâgé╠æσé½é│é═éSûóû₧üH
cmp ax,4
jl short SearchNext
skip_01:
mov al,es:[esi+5] ;âfâXâNâèâvâ^æ«É½é╠TYPE=8,9,C,Dé╚éτÄ└ìsÉΩùp
and al,0fh
cmp al,8
je short SearchNext
cmp al,9
je short SearchNext
cmp al,0ch
je short SearchNext
cmp al,0dh
je short SearchNext
mov fs,bx
cmp dword ptr fs:[0],'NOCI' ;ICONé╠âZâOâüâôâgé⌐üH
je short find_sel
SearchNext:
add esi,8
add ebx,8
jmp short sel_loop
find_sel:
mov eax,ebx
pop esi
pop ebx
pop es
pop fs
ret
seach_error:
xor eax,eax
dec eax
pop esi
pop ebx
pop es
pop fs
ret
;----------------------------------------------------------------------
; âüâéâèâRâsü[
; callm MEMCPY,destSeg,destOffset,srcSeg,srcOffset,bytes
;----------------------------------------------------------------------
memCpy:
push ebp
mov ebp,esp
add ebp,8
push es
push ds
mov edi,dword ptr [ebp+4]
mov esi,dword ptr [ebp+12]
mov ecx,dword ptr [ebp+16]
mov eax,dword ptr [ebp]
mov es,ax
mov eax,dword ptr [ebp+8]
mov ds,ax
rep movsb
pop ds
pop es
pop ebp
ret
;----------------------------------------------------------------------
; âÅü[âNâGâèâA
;----------------------------------------------------------------------
DTA db 128 dup(?)
;386|ASMé┼é═ë║é╠éPìsé≡ùLî°é╔é╖éΘ
;cseg ends
end